home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / kernel / mach / sun3.md / machConst.h < prev    next >
C/C++ Source or Header  |  1992-12-18  |  8KB  |  289 lines

  1. /*
  2.  * machConst.h --
  3.  *
  4.  *     Machine dependent constants.
  5.  *
  6.  * Copyright (C) 1985 Regents of the University of California
  7.  * All rights reserved.
  8.  *
  9.  *
  10.  * $Header: /cdrom/src/kernel/Cvsroot/kernel/mach/sun3.md/machConst.h,v 9.6 91/07/26 17:03:23 shirriff Exp $ SPRITE (Berkeley)
  11.  */
  12.  
  13. #ifndef _MACHCONST
  14. #define _MACHCONST
  15.  
  16. #ifdef KERNEL
  17. #include "vmSunConst.h"
  18. #else
  19. #include <kernel/vmSunConst.h>
  20. #endif
  21.  
  22. /*
  23.  * Here are the different types of exceptions.
  24.  */
  25. #define    MACH_RESET        0
  26. #define    MACH_BUS_ERROR        2
  27. #define    MACH_ADDRESS_ERROR    3
  28. #define    MACH_ILLEGAL_INST    4
  29. #define    MACH_ZERO_DIV        5
  30. #define    MACH_CHK_INST        6
  31. #define    MACH_TRAPV        7
  32. #define    MACH_PRIV_VIOLATION    8
  33. #define    MACH_TRACE_TRAP        9
  34. #define    MACH_EMU1010        10
  35. #define    MACH_EMU1111        11
  36. #define    MACH_STACK_FMT_ERROR    14
  37. #define    MACH_UNINIT_VECTOR    15
  38. #define    MACH_SPURIOUS_INT    24
  39. #define    MACH_LEVEL1_INT        25
  40. #define    MACH_LEVEL2_INT        26
  41. #define    MACH_LEVEL3_INT        27
  42. #define    MACH_LEVEL4_INT        28
  43. #define    MACH_LEVEL5_INT        29
  44. #define    MACH_LEVEL6_INT        30
  45. #define    MACH_LEVEL7_INT        31
  46. #define    MACH_UNIX_SYSCALL_TRAP    32
  47. #define    MACH_SYSCALL_TRAP    33
  48. #define    MACH_SIG_RET_TRAP    34
  49. #define    MACH_BAD_TRAP        35
  50.  
  51. #define    MACH_BRKPT_TRAP        47
  52. #define MACH_FP_UNORDERED_COND  48
  53. #define MACH_FP_INEXACT_RESULT  49
  54. #define MACH_FP_ZERO_DIV        50
  55. #define MACH_FP_UNDERFLOW       51
  56. #define MACH_FP_OPERAND_ERROR   52
  57. #define MACH_FP_OVERFLOW        53
  58. #define MACH_FP_NAN             54
  59. #define    MACH_UNKNOWN_EXC    55
  60.  
  61. /*
  62.  * The offsets for the various things on the exception stack
  63.  */
  64. #define    MACH_PC_OFFSET    2
  65. #define    MACH_VOR_OFFSET    6
  66.  
  67. /*
  68.  * Offsets of the fields in the Mach_State structure.
  69.  */
  70. #define    MACH_USER_SP_OFFSET        0
  71. #define MACH_TRAP_REGS_OFFSET        (MACH_USER_SP_OFFSET + 4)
  72. #define    MACH_EXC_STACK_PTR_OFFSET    (MACH_TRAP_REGS_OFFSET + 64)
  73. #define    MACH_LAST_SYS_CALL_OFFSET    (MACH_EXC_STACK_PTR_OFFSET + 4)
  74. #ifdef sun3
  75. #define MACH_TRAP_FP_REGS_OFFSET        (MACH_LAST_SYS_CALL_OFFSET + 4)
  76. #define MACH_TRAP_FP_CTRL_REGS_OFFSET   (MACH_TRAP_FP_REGS_OFFSET + 96)
  77. #define MACH_TRAP_FP_STATE_OFFSET       (MACH_TRAP_FP_CTRL_REGS_OFFSET + 12)
  78. #define    MACH_SWITCH_REGS_OFFSET        (MACH_TRAP_FP_STATE_OFFSET + 184)
  79. #else
  80. #define    MACH_SWITCH_REGS_OFFSET        (MACH_LAST_SYS_CALL_OFFSET + 4)
  81. #endif
  82. #define    MACH_KERN_STACK_START_OFFSET    (MACH_SWITCH_REGS_OFFSET + 64)
  83. #define    MACH_SIG_EXC_STACK_SIZE_OFFSET    (MACH_KERN_STACK_START_OFFSET + 4)
  84. #define    MACH_SIG_EXC_STACK_OFFSET    (MACH_SIG_EXC_STACK_SIZE_OFFSET + 4)
  85. #if 0
  86. #define MACH_SWITCH_FP_REGS_OFFSET      (MACH_SIG_EXC_STACK_OFFSET + 92)
  87. #define MACH_SWITCH_FP_CTRL_REGS_OFFSET (MACH_SWITCH_FP_REGS_OFFSET + 96)
  88. #define MACH_SWITCH_FP_STATE_OFFSET     (MACH_SWITCH_FP_CTRL_REGS_OFFSET + 12)
  89. #endif
  90.  
  91. /*
  92.  * Amount of data that is pushed onto the stack after a trap occurs.
  93.  */
  94. #define    MACH_TRAP_INFO_SIZE    24
  95.  
  96. /*
  97.  * Return codes from Exc_Trap.
  98.  *
  99.  *   MACH_OK        The trap was handled successfully.
  100.  *   MACH_KERN_ERROR    The trap could not be handled so the debugger must be
  101.  *            called.
  102.  *   MACH_USER_ERROR    A cross address space copy to/from user space failed
  103.  *            because of a bad address.
  104.  *   MACH_SIG_RETURN    Are returning from a signal handler.
  105.  */
  106. #define    MACH_OK        0
  107. #define    MACH_KERN_ERROR    1
  108. #define    MACH_USER_ERROR    2
  109. #define    MACH_SIG_RETURN    3
  110.  
  111. /*
  112.  *  Definition of bits in the 68010 status register (SR)
  113.  *    
  114.  *    MACH_SR_TRACEMODE    Trace mode mask
  115.  *    MACH_SR_SUPSTATE    Supervisor state mask
  116.  *    MACH_SR_INTMASK        Interrupt level mask
  117.  *    MACH_SR_CC        Condition codes mask
  118.  */
  119.  
  120. #define    MACH_SR_TRACEMODE    0x8000
  121. #define    MACH_SR_SUPSTATE    0x2000
  122. #define    MACH_SR_INTMASK        0x0700
  123. #define    MACH_SR_CC        0x001F
  124.  
  125. /*
  126.  *  Masks for eight interrupt priority levels:
  127.  *   lowest = 0,   highest = 7.
  128.  */
  129. #define    MACH_SR_PRIO_0        0x0000
  130. #define    MACH_SR_PRIO_1        0x0100
  131. #define    MACH_SR_PRIO_2        0x0200
  132. #define    MACH_SR_PRIO_3        0x0300
  133. #define    MACH_SR_PRIO_4        0x0400
  134. #define    MACH_SR_PRIO_5        0x0500
  135. #define    MACH_SR_PRIO_6        0x0600
  136. #define    MACH_SR_PRIO_7        0x0700
  137.  
  138. /*
  139.  *  State priorities in the status register:
  140.  *
  141.  *    MACH_SR_HIGHPRIO    Supervisor mode + interrupts disabled
  142.  *    MACH_SR_LOWPRIO        Supervisor mode + interrupts enabled
  143.  *    MACH_SR_USERPRIO    User mode
  144.  */
  145. #define    MACH_SR_HIGHPRIO    0x2700
  146. #define    MACH_SR_LOWPRIO        0x2000
  147. #define    MACH_SR_USERPRIO    0x0000
  148.  
  149. /*
  150.  * Different stack formats on a 68000
  151.  */
  152. #define    MACH_SHORT        0x0
  153. #define    MACH_THROWAWAY        0x1
  154. #define    MACH_INST_EXCEPT    0x2
  155. #define    MACH_MC68010_BUS_FAULT    0x8
  156. #define    MACH_COPROC_MID_INSTR    0x9
  157. #define    MACH_SHORT_BUS_FAULT    0xa
  158. #define    MACH_LONG_BUS_FAULT    0xb
  159.  
  160. /*
  161.  * The sizes of the different stack formats.
  162.  */
  163. #define    MACH_SHORT_SIZE            8
  164. #define MACH_THROWAWAY_SIZE        8
  165. #define    MACH_INST_EXCEPT_SIZE        12
  166. #define MACH_MC68010_BUS_FAULT_SIZE    58
  167. #define MACH_COPROC_MID_INSTR_SIZE    20
  168. #define MACH_SHORT_BUS_FAULT_SIZE    32
  169. #define    MACH_LONG_BUS_FAULT_SIZE    92
  170.  
  171. /*
  172.  * MACH_KERN_START    The address where the kernel image is loaded at.
  173.  * MACH_CODE_START    The address where the kernel code is loaded at.
  174.  * MACH_STACK_BOTTOM    The address of the bottom of the kernel stack for the
  175.  *            main process that is initially run.
  176.  * MACH_KERN_END    The address where the last kernel virtual address is
  177.  *            at.  Beyond this is used for device mappings.
  178.  * MACH_KERN_STACK_SIZE Number of bytes in a kernel stack.
  179.  * MACH_BARE_STACK_OFFSET    Offset of where a bare kernel stack starts.
  180.  *                It doesn't start at the very top because
  181.  *                the debugger requires a couple of integers
  182.  *                of padding on the top.
  183.  * MAGIC        A magic number which is pushed onto the stack before
  184.  *            a context switch.  Used to verify that the stack 
  185.  *            doesn't get trashed.
  186.  */
  187. #ifdef sun3
  188. #define    MACH_KERN_START        0xe000000
  189. #define    MACH_CODE_START        0xe004000
  190. #define    MACH_STACK_BOTTOM    0xe000000
  191. #else
  192. #define    MACH_KERN_START        0x800000
  193. #define    MACH_CODE_START        0x804000
  194. #define    MACH_STACK_BOTTOM    0x802000
  195. #endif
  196. #define MACH_KERN_END        VMMACH_KERN_END
  197. #define    MACH_KERN_STACK_SIZE    (MACH_CODE_START - MACH_STACK_BOTTOM)
  198. #define    MACH_BARE_STACK_OFFSET    (MACH_KERN_STACK_SIZE - 8)
  199. #define    MAGIC            0xFeedBabe
  200.  
  201. /*
  202.  * Constants for the user's address space.
  203.  * 
  204.  * MACH_FIRST_USER_ADDR        The lowest possible address in the user's VAS.
  205.  * MACH_LAST_USER_ADDR        The highest possible address in the user's VAS.
  206.  * MACH_LAST_USER_STACK_PAGE    The highest page in the user stack segment.
  207.  * MACH_MAX_USER_STACK_ADDR    The highest value that the user stack pointer
  208.  *                can have.  Note that the stack pointer must be 
  209.  *                decremented before anything can be stored on 
  210.  *                the stack.
  211.  */
  212. #define    MACH_FIRST_USER_ADDR        VMMACH_PAGE_SIZE
  213. #define    MACH_LAST_USER_ADDR        (MACH_MAX_USER_STACK_ADDR - 1)
  214. #define    MACH_LAST_USER_STACK_PAGE    ((MACH_MAX_USER_STACK_ADDR - 1) / VMMACH_PAGE_SIZE)
  215. #if 0
  216. #define    MACH_MAX_USER_STACK_ADDR    (VMMACH_MAP_SEG_ADDR - VMMACH_USER_SHARED_PAGES*VMMACH_PAGE_SIZE)
  217. #else
  218. #define    MACH_MAX_USER_STACK_ADDR    0x0d000000
  219. #endif
  220.  
  221. /*
  222.  * Offset of unixErrno in process control block
  223.  */
  224. #define MACH_UNIX_ERRNO_OFFSET      696
  225.  
  226. /*
  227.  * Maximum number of processors configuable.
  228.  */
  229.  
  230. #define    MACH_MAX_NUM_PROCESSORS        1
  231.  
  232. #ifdef sun3
  233. /*
  234.  * Constants to access bits in the interrupt register.
  235.  */
  236.  
  237. #define    MACH_ENABLE_ALL_INTERRUPTS    0x01
  238. #define    MACH_ENABLE_LEVEL7_INTR        0x80
  239. #define    MACH_ENABLE_LEVEL5_INTR        0x20
  240.  
  241. /*
  242.  * Constants to access bits in the system enable register.
  243.  */
  244. #define MACH_ENABLE_FPP            0x40
  245.  
  246. /*
  247.  * Then number of floating point registers in the mc68881/2
  248.  */
  249. #define MACH_NUM_FPRS       8
  250.  
  251. /*
  252.  * The amount of memory needed to store the internal state of the
  253.  * floating point coprocessor.  This is 184 for the mc68881, but
  254.  * 216 for the mc68882.
  255.  */
  256. #define MACH_FP_STATE_SIZE  184
  257.  
  258. #endif /* sun3 */
  259.  
  260. /*
  261.  * The number of general purpose registers (d0-d7 and a0-a7)
  262.  */
  263. #define    MACH_NUM_GPRS    16
  264.  
  265. /*
  266.  * The indices of all of the registers in the standard 16 register array of
  267.  * saved register.
  268.  */
  269. #define    D0    0
  270. #define    D1    1
  271. #define    D2    2
  272. #define    D3    3
  273. #define    D4    4
  274. #define    D5    5
  275. #define    D6    6
  276. #define    D7    7
  277. #define    A0    8
  278. #define    A1    9
  279. #define    A2    10
  280. #define    A3    11
  281. #define    A4    12
  282. #define    A5    13
  283. #define    A6    14
  284. #define    FP    14
  285. #define    A7    15
  286. #define    SP    15
  287.  
  288. #endif /* _MACHCONST */
  289.